home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 001 / pibt40s1.arc / GETENVST.MOD < prev    next >
Encoding:
Text File  |  1987-05-18  |  3.6 KB  |  96 lines

  1. (*----------------------------------------------------------------------*)
  2. (*           GetEnvStr --- get string from DOS environment              *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. FUNCTION GetEnvStr( Search_String : AnyStr ) : AnyStr;
  6.  
  7. (*----------------------------------------------------------------------*)
  8. (*                                                                      *)
  9. (*     Function:   GetEnvStr                                            *)
  10. (*                                                                      *)
  11. (*     Purpose:    Gets string from DOS enviroment area                 *)
  12. (*                                                                      *)
  13. (*     Calling Sequence:                                                *)
  14. (*                                                                      *)
  15. (*        EnvString := GetEnvStr( Search_String : AnyStr ) : AnyStr;    *)
  16. (*                                                                      *)
  17. (*           Search_String --- String to be searched for                *)
  18. (*           EnvString     --- Resultant string value or null if not    *)
  19. (*                             found.                                   *)
  20. (*                                                                      *)
  21. (*----------------------------------------------------------------------*)
  22.  
  23. TYPE
  24.    DosEnv = ARRAY[0..32767] OF CHAR;
  25.  
  26. VAR
  27.    EnvPtr: ^DosEnv;
  28.    EnvStr: AnyStr;
  29.    Done  : BOOLEAN;
  30.    I     : INTEGER;
  31.    L     : INTEGER;
  32.  
  33. BEGIN (* GetEnvStr *)
  34.                                    (* Add '=' to search string.           *)
  35.  
  36.    L                := SUCC( ORD( Search_String[0] ) );
  37.    Search_String[0] := CHR( L );
  38.    Search_String[L] := '=';
  39.                                    (* Get address of DOS environment area *)
  40.  
  41.    EnvPtr        := PTR( MemW[ CSeg:$002C ] , 0 );
  42.  
  43.                                    (* Begin loop looking for string *)
  44.    I              := 0;
  45.    Done           := FALSE;
  46.    EnvStr[0]      := #0;
  47.    GetEnvStr[0]   := #0;
  48.  
  49.    REPEAT
  50.       IF EnvPtr^[I] = #0 THEN
  51.          BEGIN
  52.                                    (* Environment area ends with two      *)
  53.                                    (* successive 0 bytes.                 *)
  54.  
  55.             IF ( EnvPtr^[I+1] = #0 ) THEN
  56.                BEGIN
  57.  
  58.                   Done := TRUE;
  59.  
  60.                   IF ( Search_String = '==' ) THEN
  61.                      BEGIN
  62.                         EnvStr[0] := #0;
  63.                         I         := I + 4;
  64.                         WHILE( EnvPtr^[I] <> #0 ) DO
  65.                            BEGIN
  66.                               EnvStr := EnvStr + EnvPtr^[I];
  67.                               I      := SUCC( I );
  68.                            END;
  69.                         GetEnvStr := EnvStr;
  70.                      END;
  71.  
  72.                END;
  73.                                    (* If we found string, get associated  *)
  74.                                    (* value.                              *)
  75.  
  76.             IF ( COPY( EnvStr , 1 , L ) = Search_String ) THEN
  77.                BEGIN
  78.                   GetEnvStr := COPY( EnvStr, SUCC( L ), LENGTH( EnvStr ) - L );
  79.                   Done      := TRUE;
  80.                END;
  81.                                    (* Set current environment string to null *)
  82.             EnvStr[0] := #0;
  83.  
  84.          END
  85.       ELSE
  86.                                    (* Not CHR(0) --- append to current    *)
  87.                                    (* environment string being extracted. *)
  88.  
  89.          EnvStr := EnvStr + EnvPtr^[I];
  90.  
  91.       I := SUCC( I );
  92.  
  93.    UNTIL Done;
  94.  
  95. END    (* GetEnvStr *);
  96.